package com.ztt.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 图片等数据下载网络请求类
 * @author apple
 *
 */
public class HTTPUtils {

    /** 
     * 将图片写入到磁盘 
     * @param img 图片数据流 
     * @param fileName 文件保存时的名称 
     */  
    public static boolean writeImageToDisk(byte[] img, String fileName ,String folder){  
    	try {  
            File fileFoler = new File(folder);
            if(!fileFoler.exists()){
            	fileFoler.mkdir();
            }
            File file=new File(fileFoler.getAbsoluteFile()+"/"+fileName);
            FileOutputStream fops = new FileOutputStream(file);  
            fops.write(img);  
            fops.flush();  
            fops.close();  
            System.out.println("图片已经写入到:"+folder+"/"+fileName); 
            return true;
        } catch (Exception e) {  
            e.printStackTrace();  
        }
       return false;
    }  
    
    public static InputStream getStringFromNetByUrl(String strUrl){
    	 try {  
             URL url = new URL(strUrl);  
             HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
             conn.setRequestMethod("GET");  
             conn.setConnectTimeout(10 * 1000);  
             InputStream inStream = conn.getInputStream();//通过输入流获取返回数据  
             return inStream;
         } catch (Exception e) {  
             e.printStackTrace();  
         }  
         return null;  
    }
    
    
    /** 
     * 根据地址获得数据的字节流 
     * @param strUrl 网络连接地址 
     * @return 
     */  
    public static byte[] getImageFromNetByUrl(String strUrl){  
        try {  
            URL url = new URL(strUrl);  
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setConnectTimeout(30 * 1000); 
            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据  
            byte[] btImg = readInputStream(inStream);//得到图片的二进制数据  
            return btImg;  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
    /** 
     * 从输入流中获取数据 
     * @param inStream 输入流 
     * @return 
     * @throws Exception 
     */  
    public static byte[] readInputStream(InputStream inStream) throws Exception{  
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
        byte[] buffer = new byte[1024];  
        int len = 0;  
        while( (len=inStream.read(buffer)) != -1 ){  
            outStream.write(buffer, 0, len);  
        }  
        inStream.close();  
        return outStream.toByteArray();  
    }  
    
    public static String readInputStreamToStr(InputStream inStream)throws Exception{
    	byte[] buffer=new byte[2048];
    	int length=0;
    	StringBuffer sbuffer=new StringBuffer();
    	while((length=inStream.read(buffer))!=-1){
    		sbuffer.append(new String(buffer, 0, length, "gbk"));
    	}
    	return sbuffer.toString();
    }
}
